package com.it.springdoc.configuration;

import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.servers.Server;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;

/**
 * 访问地址：http://localhost:8080/swagger-ui/index.html#/
 */
@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI api() {
        return new OpenAPI()
                .info(new Info().title("Alignment open api")
                        .description("Alignment open api")
                        .version("1.0")
                        .license(new License().name("Apache 2.0").url("https://www.apache.org/licenses/LICENSE-2.0.html")))
                .servers(Arrays.asList(
                        new Server().description("prod").url("https://www.tmxmall.com/aligner")
                ))
                .externalDocs(new ExternalDocumentation()
                        .description("Alignment help center")
                        .url("https://help.tmxmall.com/hc/zh-cn"));
    }

    //右上角的分组，可创建多个
    @Bean
    public GroupedOpenApi openApi() {
        return GroupedOpenApi.builder()
                .group("openApi")
                .pathsToMatch("/api/v1/**")
                .addOpenApiCustomiser(openApiCustomiser())
                .build();
    }

    public OpenApiCustomiser openApiCustomiser() {
        return openApi -> openApi
                .openapi("3.0.0")
                .externalDocs(new ExternalDocumentation()
                        .description("Alignment help center")
                        .url("https://help.tmxmall.com/hc/zh-cn"))
                .info(new io.swagger.v3.oas.models.info.Info()
                        .title("Alignment Open API")
                        .description("# Introduction \n\n" +
                                "欢迎使用Alignment Open API v1!" +
                                "我们的API基于RESTFUL风格，能够快速、便捷地调整语料对齐结果。\n\n" +
                                "通过API文档，您可以轻松获取所有关于语料对齐的重要特性，" +
                                "它允许您导入文档、段落调整、句对调整、导出文件和术语提取等等。您可以根据您的需求采取适合的操作。\n\n" +
                                "# Authorization \n\n" +
                                "为了使用 Open API，我们需要使用访问令牌进行授权。请前往 **YiCAT > 我的资料 > 访问令牌管理**，点击 **创建** 按钮添加一个新的令牌到你的账户。\n\n" +
                                "在您发送请求时，请确保使用以下标头：\n\n" +
                                "```\n\n" +
                                "Authorization: Bearer <ACCESS_TOKEN>\n\n" +
                                "```\n\n")
                        .version("1.0")
                        .contact(new io.swagger.v3.oas.models.info.Contact().name("Alignment").email("services@tmxmall.com")))
                .servers(Arrays.asList(
                        new Server().url("https://www.tmxmall.com/aligner")
                ));
    }

    /**
     * 如果你不喜欢 swagger-ui 的界面风格，会集成 knife4j 的 ui。Spring Doc 也可以集成 knife4j。
     * 如果要使用 knife4j ，Spring Doc 的配置中需要添加分组配置，我们这里添加一个最简单的分组配置。
     * @return
     */
    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .group("title")
                .pathsToMatch("/**")
                .build();
    }

}
